package com.kuang.service;

import com.kuang.dao.UserDao;
import com.kuang.dao.UserDaoImpl;
import com.kuang.dao.UserDaoMysqlImpl;
import com.kuang.dao.UserDaoOracleImpl;

public class UserServiceImpl implements UserService{  //业务层
//    UserDao userDao = new UserDaoImpl();
//    UserDao userDao = new UserDaoOracleImpl();
    UserDao userDao = new UserDaoMysqlImpl();  //实例化一个Dao层的类
    public void setUserDao(UserDao userDao){ //本方法实现了控制反转。
            //  set注入！！！！！！！！
        this.userDao = userDao;//这样就无需更改业务层的new的实例类型，只需要让用户在他自己的客户端程序里
    }                          //传入他需要的实例类型作为参数（传的时候现new）就可以得到该类相应的服务。
    @Override
    public void getUser() {
        userDao.getUser();//业务层 使用方法的办法 是 让Dao层的实例调用方法。

        // ★ 用户实例化业务层的类，业务层实例化Dao层的类。
        // ★ 【控制反转IOC】为什么会诞生？就是因为每次改变使用Dao层的哪个方法都要在这个类(UserServiceImpl)里改,
        // 太麻烦了。控制反转，让业务层不用再负责实例（对象）的创建，系统的耦合性大大降低。
        // 控制反转，就是在服务端增加类的时候，不用改写服务端的程序，而是让用户在自己的客户端上做一些改变。
    }
}
